1. Field of the Invention
This invention relates to embedded code, such as microcode, and more particularly relates to an apparatus, system, and method for a code image update on a communications adapter.
2. Description of the Related Art
Users continue to require high availability from computer systems and computer subsystems. Web servers, database servers, application servers, and the like are expected to be available around the clock. Maintenance and upgrades to these systems should minimize time the system is off-line.
The computer system or subsystem includes a basic set of instructions for performing operations. This basic set of instructions comprises a fundamental set of computer instructions, similar to an operating system, which define how the computer system or subsystem will function. Generally, this basic set of instructions is referred to as the code image, microcode, embedded code, or the like. The code image typically includes assembly code instructions or raw machine language binary code instructions that are optimized for a particular microprocessor and/or set of hardware.
Typically, a Basic Input Output System (BIOS) program loads the code image into volatile RAM when a computer system is powered on. Alternatively, the code image is stored in non-volatile RAM or other forms of memory. Execution of the instructions in the code image begins once the computer system properly initializes.
Periodically, the code image must be updated to provide improved functionality, resolve programming bugs, and/or support new hardware. It is desirable that an old code image be updated with a new code image with minimal interruption of the computer system concurrently executing the old code image. In addition, it is desirable that the new code image be stored in approximately the same location in memory as the old code image. Specifically, the new code image may be larger or smaller than the old code image, but is generally stored at least in part over the old code image. The code image update should require minimal time, comprise operations of minimal complexity and provide minimal delay in resuming regular operations once the update completes.
Conventionally, code image updates are performed by a section of the old code image known as the bootstrap code. The bootstrap code is executed in response to an interrupt signaling a code image update operation. Generally, the bootstrap code copies a new code image directly from a source, such as a disk drive, into the same space occupied by the old code image. The copy operation partially or wholly overwrites the old code image with the new code image. This process is known as a code overlay.
A typical code overlay process requires that the affected hardware device be off-line for a relatively substantial amount of time. In the case of an I/O adapter, such as a host bus adapter, the process may take several minutes to complete, during which time the host may determine that the adapter has failed and switch over to an alternate path. In the case where no alternate path exists, the entire system may be halted during this lengthy process. Whether the system is halted during the timeout and failover period, or whether the system is entirely off-line during the code overlay process, disruption to I/O paths and system availability to the user can have costly affects.
Accordingly, what is needed are an apparatus, system, and method that minimize the amount of I/O disruption that may occur during a code overlay process. Beneficially, such an apparatus, system, and method would overcome the need for multiple paths, as well as reduce the disruption time to within a tolerable threshold, avoiding timeouts, failures, and the necessary recovery time.